import xml.etree.ElementTree as ET
import numpy as np
import pandas as pd
results_list = []
XTIMER_BACKOFFS=[40, 30, 22]
for i, backoff in enumerate(XTIMER_BACKOFFS, start=1):
file = f"data/sleep_accuracy/xunit_xtimer_usleep_set_XTIMER_BACKOFF_{backoff}_now.xml"
root = ET.parse(file).getroot()
for d in root.find("testcase[@name='Measure Xtimer Set Accuracy Microseconds Template']").findall(".//property"):
duration = d.get("name").split('-')[-1]
results = [float(v["diff"]) - (int(duration) / 1000_000) for v in eval(d.get("value"))] # diff from sleep time
results_list.append({
'type': 'xtimer_set',
'backoff': backoff,
'duration': duration,
'results': results,
'mean': np.mean(results),
'max': np.amax(results),
'min': np.amin(results)
})
for d in root.find("testcase[@name='Measure Xtimer Usleep Accuracy Microseconds Template']").findall(".//property"):
duration = d.get("name").split('-')[-1]
results = [float(v["diff"]) - (int(duration) / 1000_000) for v in eval(d.get("value"))] # diff from sleep time
results_list.append({
'type': 'xtimer_usleep',
'backoff': backoff,
'duration': duration,
'results': results,
'mean': np.mean(results),
'max': np.amax(results),
'min': np.amin(results)
})
sleep_accuracy = pd.DataFrame.from_dict(results_list)
import plotly.graph_objects as go
xtimer_set_traces = []
xtimer_usleep_traces = []
for backoff in sleep_accuracy['backoff'].unique():
xtimer_set = sleep_accuracy.loc[sleep_accuracy['type'] == 'xtimer_set']
data = xtimer_set[xtimer_set['backoff'] == backoff]
xtimer_set_traces.append(go.Scatter(x=data['duration'], y=data['mean'], name=f'xtimer_set / {backoff}'))
xtimer_set = sleep_accuracy.loc[sleep_accuracy['type'] == 'xtimer_usleep']
data = xtimer_set[xtimer_set['backoff'] == backoff]
xtimer_usleep_traces.append(go.Scatter(x=data['duration'], y=data['mean'], name=f'xtimer_usleep / {backoff}'))
sleep_accuracy_fig = go.Figure()
sleep_accuracy_fig.add_traces(xtimer_set_traces)
sleep_accuracy_fig.add_traces(xtimer_usleep_traces)
sleep_accuracy_fig.update_layout(
title="Sleep Accuracy with multiple XTIMER_BACKOFF",
xaxis_title="Specified Sleep Duration [us]",
yaxis_title="Real Sleep Duration [s]",
)
# add range slider
sleep_accuracy_fig.update_layout(
xaxis=dict(
rangeslider=dict(
visible=True,
)
)
)
# fig.write_html("sleep_accuracy.html", include_plotlyjs='cdn')
sleep_accuracy_fig.show()
file = "data/sleep_jitter/xunit copy.xml"
root = ET.parse(file).getroot()
results_list = []
for d in root.find("testcase[@name='Measure Sleep Jitter 50']").findall(".//property"):
if d.get('name') == 'trace':
# print(d.get('value'))
duration = [t['diff'] for t in eval(d.get('value'))]
if d.get('name') == 'focus':
focus = eval(d.get('value'))[0]
if d.get('name') == 'intervals':
intervals = eval(d.get('value'))
# print(focus)
intervals = list(map(lambda i: int(i) / int(focus), intervals))
# print(intervals)
# print(duration)
# print(len(duration))
timer_count = [1 for i in range(len(duration))]
for i, count in enumerate(timer_count):
x = i + 1
for itv in intervals:
timer_count[i] += int(not x % itv)
# timer_count[i] += int(not x % 2) + int(not x % 4) + int(not x % 8) + int(not x % 16)
# print(timer_count)
# print(len(timer_count))
xaxis = range(1, 51)
# print(xaxis)
# print(len(xaxis))
import pandas as pd
sleep_jitter = pd.DataFrame({'second': xaxis, 'duration': duration, 'timer_count': timer_count})
# print(sleep_jitter)
import plotly.express as px
sleep_jitter_fig = px.scatter(sleep_jitter, x='second', y='duration', size='timer_count')
sleep_jitter_fig.show()